As processing resources have increased, demands to run multiple software programs and operating systems on a single microprocessor have also increased. An environment, referred to as virtual machine extension (VMX) architecture, typically, allocates a single processor's resources to various software application and operating systems. Therefore, a single microprocessor's or multiple processing element's resources may be divided between multiple operating systems and multiple applications, which allows a user to potentially increase their usage on a computing platform.
Typically, in a VMX environment, a virtual machine monitor (VMM) program interfaces with one or more software programs, such as a virtual machine (VM) program, and a single or multiple microprocessors. A virtual machine (VM) may include guest software, such as an operating system (OS) or other software applications. Usually, to allow multiple VMs to run on a single processor the state information and control information for the VMM and each VM program is stored in memory.
One structure commonly used for storing such state and control information is a virtual machine control structure (VMCS). Storing the VMCS in the microprocessor can potentially make addressing the VMCS architecture specific; therefore, the VMCS is typically located in a portion of main system memory.
However, locating the VMCS in system memory usually creates addressing limitations for micro-processors that use virtual memory addressing. Typically, a microprocessor that utilizes virtual memory generates a linear address for a memory location to be fetched or written to. That linear address is translated by a translation unit in the microprocessor to a physical address of the memory location in a system memory. Although, the VMCS portion of the system memory may be addressed in this manner, errors in the translation process, such as a page fault, are difficult to handle in a VMX environment. Therefore, many instructions, such as VMWRITE, VMREAD, and other VMX instructions, physically address a memory location in system memory, rather than providing a linear address to be translated.
In a microprocessor that utilizes virtual memory paging, a VMX instruction may need to access physical memory directly without linear to physical address translation however, current systems usually require disabling the virtual memory paging and flushing of the linear to physical address translation buffer before a direct physical address access to memory can occur. The amount of time needed to disabling paging and flush the translation buffer typically incurs a large execution time penalty.